/* 
 * File:   simuladorCircuitos.h
 * Author: jesus
 *
 * Created on 7 de junio de 2010, 15:52
 */
#include <list>
#include "componente.h"
#ifndef _SIMULADORCIRCUITOS_H
#define	_SIMULADORCIRCUITOS_H

class ErrorIntegridad{};

class SimuladorCircuitos{
    list<Componente> componentes;
    //friend class Componente;

public:
     SimuladorCircuitos();
     ~SimuladorCircuitos();
    void nuevoComponente(Componente &componente);
    bool comprobarIntegridad();
    void simular();

};
 SimuladorCircuitos::SimuladorCircuitos(){

}
void SimuladorCircuitos::nuevoComponente(Componente &componente){
    componentes.push_back(componente);
}
bool SimuladorCircuitos::comprobarIntegridad(){
    int i;
    bool result=true;
    list<Componente>::iterator it ;

    for(it=componentes.begin();it!=componentes.end();++it)
    {

            if(it->verSalida()==D) result=false;

            else if(it->verTipo()!=INTERRUPTOR){
                if((it->verTipo()==AND)||(it->verTipo()==OR)){
                    if(it->numEntradasConectadas()!=2) result= false;

                }
                else if(it->verTipo()==NOT){
                    if(it->numEntradasConectadas()!=1) result= false;
                }
            }
            else if(it->verTipo()==INTERRUPTOR){
                if(it->verSalida()!=F) result = false;
            }

    }
    return result;
}
void SimuladorCircuitos::simular(){
    int i;
    list<Componente>::iterator it=componentes.begin();

    if(comprobarIntegridad()==true){

        while(it!=componentes.end()){
            it->reset();
            it++;
        }
    }
    else throw ErrorIntegridad();


}
#endif	/* _SIMULADORCIRCUITOS_H */

